package com.nowcoder.Offer.String;


import org.junit.Test;

/**
 * 判断字符串是否是合法的数字
 */
public class isNumeric {
    public boolean isNumeric(char[] str) {
        boolean sign = false, decimal = false, hasE = false;

        for(int i=0 ;i<str.length; i++){
            if(str[i] == 'e' || str[i] == 'E'){
                if(i == str.length - 1)
                    return  false;// E后面一定要有数字
                if(hasE)
                    return  false; // 只能有一个e

                hasE = true;
            }else if(str[i] == '+' || str[i] == '-'){
                if(sign && str[i-1] != 'e' && str[i-1] != 'E') //如果已经有符号了 +- 只能紧跟在e后面
                    return false;
                if(!sign && i>0 && str[i-1]!='e' && str[i-1] !='E')//如果还没有符号 并且不是在开头的，那么也是要跟在e后面
                    return false;

                sign = true;
            }else if(str[i] == '.'){
                if(hasE || decimal) return  false; // e 后面不能出现’.'
                decimal = true;
            }else if(str[i] < '0' || str[i] > '9')//排除不是数字之外的字符
                return false;
        }
        return  true;//到最后才能返回真
    }

    @Test
    public void test(){
        System.out.println(isNumeric("1.79769313486232E+308".toCharArray()));
    }
}
